package cn.zqy.demo2.day12FunctionalInterface.Lambda;
/*
    使用Lambda优化日志案例
    Lambda的特点:延迟加载
    Lambda的使用前提,必须存在函数式接口

    【困惑】:Lambda优化过的代码，执行的循环比不优化的更费时间
 */
public class Demo02LambdaOptimise {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        String str1 = "Hello";
        String str2 = "World";
        String str3 = "MyGirl";

         /*
            使用Lambda表达式作为参数传递,仅仅是把参数传递到showLog方法中
            只有满足条件,日志的等级是1级
                才会调用接口MessageBuilder中的方法builderMessage
                才会进行字符串的拼接
            如果条件不满足,日志的等级不是1级
                那么MessageBuilder接口中的方法builderMessage也不会执行
                所以拼接字符串的代码也不会执行
            所以不会存在性能的浪费
         */
        for (int i = 0; i< 100000; ++i) {
            message(2, () -> {
                System.out.println(str1 + str2 + str3);
            });
        }
       long stop = System.currentTimeMillis();
       long cost = stop - start;
        System.out.println(cost);
    }

    public static void message(int level, MessageInter message) {
        if (level == 1) {
            message.messageBuilder();
        }
    }
}
